package com.searchengine.service;

import com.searchengine.entity.PaymentRecord;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 支付服务接口
 */
public interface PaymentService {

    /**
     * 创建支付订单
     * @param userId 用户ID
     * @param keyword 关键词
     * @param weight 权重值
     * @param durationDays 持续天数
     * @return 支付记录对象
     */
    PaymentRecord createPaymentOrder(Long userId, String keyword, BigDecimal weight, Integer durationDays);

    /**
     * 生成支付URL
     * @param orderNo 订单号
     * @param amount 金额
     * @param subject 订单标题
     * @return 支付URL
     */
    String generatePaymentUrl(String orderNo, BigDecimal amount, String subject);

    /**
     * 处理支付回调
     * @param params 回调参数
     * @return 处理结果
     */
    boolean handlePaymentCallback(Map<String, String> params);

    /**
     * 查询订单状态
     * @param orderNo 订单号
     * @return 支付记录对象
     */
    PaymentRecord queryOrderStatus(String orderNo);

    /**
     * 关闭订单
     * @param orderNo 订单号
     * @return 是否关闭成功
     */
    boolean closeOrder(String orderNo);

    /**
     * 获取用户的支付记录
     * @param userId 用户ID
     * @return 支付记录列表
     */
    List<PaymentRecord> getUserPaymentRecords(Long userId);

    /**
     * 计算支付金额
     * @param weight 权重值
     * @param durationDays 持续天数
     * @return 金额
     */
    BigDecimal calculateAmount(BigDecimal weight, Integer durationDays);

    /**
     * 验证支付签名
     * @param params 参数
     * @param sign 签名
     * @return 是否验证通过
     */
    boolean verifyPaymentSign(Map<String, String> params, String sign);
}